package org.sam.swing.table.renderer;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;

import javax.swing.table.DefaultTableCellRenderer;

/**
 * 单独写的一个int转换为time的渲染对象
 * 这个对象比较特殊
 * 
 * @author sam
 *
 */
public class JSTableLocalTimeFormatRenderer extends DefaultTableCellRenderer {

	private static final long serialVersionUID = -3981456436820431417L;

	/**
	 * 当前的掩码格式对象
	 */
	private DateTimeFormatter format;
	
	/**
	 * 默认的掩码格式
	 */
	public static final String DEFAULT_NULL = "00:00:00";

	/**
	 * 当前的掩码格式对象
	 * 
	 * @return
	 */
	public DateTimeFormatter getFormat() {
		return format;
	}

	/**
	 * 当前的掩码格式对象
	 * 
	 * @param format
	 */
	public void setFormat(DateTimeFormatter format) {
		this.format = format;
	}

	/**
	 * 空值显示文本
	 */
	private String nullText;

	/**
	 * 空值显示文本
	 * 
	 * @return
	 */
	public String getNullText() {
		return nullText;
	}

	/**
	 * 空值显示文本
	 * 
	 * @param nullText
	 */
	public void setNullText(String nullText) {
		this.nullText = nullText;
	}

	/**
	 * 带参数的构造函数
	 * 
	 * @param formator
	 *            掩码格式对象
	 * @param nullText
	 *            空值显示文本
	 */
	public JSTableLocalTimeFormatRenderer(DateTimeFormatter formator, String nullText) {
		super();
		this.setFormat(formator);
		this.setNullText(nullText);
	}

	/**
	 * 带有掩码格式的构造函数
	 * 
	 * @param formator
	 */
	public JSTableLocalTimeFormatRenderer(DateTimeFormatter formator) {
		this(formator, DEFAULT_NULL);
	}
	
	/**
	 * 带有掩码格式的构造函数
	 * 
	 * @param formator
	 */
	public JSTableLocalTimeFormatRenderer() {
		this(DateTimeFormatter.ofPattern("HH:mm:ss") , DEFAULT_NULL);
	}

	/**
	 * 重写绘制方法
	 */
	@Override
	protected void setValue(Object value) {
		try {
			if (Objects.isNull(value)){
				this.setText(DEFAULT_NULL);
			} else if (value instanceof Integer){
				LocalTime time = LocalTime.ofSecondOfDay((Integer)value);
				setText(time.format(format));
			} else if(value instanceof Long){
				LocalTime time = LocalTime.ofSecondOfDay((Long)value);
				setText(time.format(format));
			} else {
				setText(value.toString());
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			setText("");
		}
	}
}
